package com.danceforyou.common.dao;

import com.danceforyou.common.model.BaseDO;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 类名称：BaseDAO
 * 创建人：danceforyou
 * 创建时间：2020年10月23日
 * 版本号：1.0v
 */
public interface BaseDAO<T, DO extends BaseDO<T>, VO extends DO> {
    /*新增数据*/
    int insert(DO var1);

    /*更新数据（不更新为null的列）*/
    int update(DO var1);

    /*全列更新*/
    int updateWhole(DO var1);

    /*根据指定字段更新数据（不更新为null的列）*/
    int updateByProperty(DO var1, @Param("property") String var2, @Param("value") Object var3);

    /*根据指定字段全列更新*/
    int updateWholeByProperty(DO var1, @Param("property") String var2, @Param("value") Object var3);

    /*根据主键单条删除*/
    int deleteById(@Param("id") Object var1);

    /*根据主键批量删除*/
    int deleteByIds(@Param("idList") List<T> var1);

    /*根据指定字段删除*/
    int deleteByProperty(@Param("property") String var1, @Param("value") Object var2);

    /*根据条件批量删除*/
    int deleteByCondition(@Param("condition") Map<String, Object> var1);

    /*根据主键单条标记为删除*/
    int setDeleteById(@Param("id") T var1);

    /*根据主键批量标记为删除*/
    int setDeleteByIds(@Param("idList") List<T> var1);

    /*根据指定字段标记为删除*/
    int setDeleteByProperty(@Param("property") String var1, @Param("value") Object var2);

    /*根据条件批量标记为删除*/
    int setDeleteByCondition(@Param("condition") Map<String, Object> var1);

    /*根据主键获取数据*/
    DO getById(@Param("id") T var1);

    /*根据指定字段获取数据*/
    DO getByProperty(@Param("property") String var1, @Param("value") Object var2, @Param("orderBy") String var3, @Param("sortBy") String var4);

    /*根据条件获取数据*/
    DO getByCondition(@Param("condition") Map<String, Object> var1, @Param("orderBy") String var2, @Param("sortBy") String var3);

    /*获取所有数据列表*/
    List<DO> listAll(@Param("orderBy") String var1, @Param("sortBy") String var2);

    /*根据指定字段获取数据列表*/
    List<DO> listByProperty(@Param("property") String var1, @Param("value") Object var2, @Param("orderBy") String var3, @Param("sortBy") String var4);

    /*根据条件获取数据列表*/
    List<DO> listByCondition(@Param("condition") Map<String, Object> var1, @Param("orderBy") String var2, @Param("sortBy") String var3);

    /*查询数据列表*/
    List<VO> queryList(@Param("condition") Map<String, Object> var1, @Param("orderBy") String var2, @Param("sortBy") String var3);

    /*分页查询数据列表*/
    List<VO> queryPage(@Param("condition") Map<String, Object> var1, @Param("offset") int var2, @Param("rows") int var3, @Param("orderBy") String var4, @Param("sortBy") String var5);

    /*根据条件查询总条数*/
    Integer countByCondition(@Param("condition") Map<String, Object> var1);

    /*根据条件统计数据*/
    Map<String, Object> statsByCondition(@Param("condition") Map<String, Object> var1);

    /*根据条件求和*/
    BigDecimal sumByCondition(@Param("property") String var1, @Param("condition") Map<String, Object> var2);
}
